﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;

namespace Interfaz
{
    public partial class VentProveedores : Form
    {

        #region atributos

        private List<Proveedor> lProveedores;
        List<PlanDePago> lPlanesDePago;
        private int ultimoIdProveedor;
        private bool ingreso;
        private Proveedor actualProveedor;

        #endregion

        #region constructor

        public VentProveedores()
        {
            InitializeComponent();            
            ultimoIdProveedor = Sistema.getultimoIdProveedor();
            lPlanesDePago = Sistema.getPlanesDePago();
            comboPlan.DataSource = lPlanesDePago.ToArray();
            PlanDePago planAux = new PlanDePago();
            planAux.OID = -1;
            lPlanesDePago.Add(planAux);
            comboBoxBuscarPlan.DataSource = lPlanesDePago.ToArray();
            comboBoxBuscarPlan.SelectedIndex = -1;            
            lProveedores = new List<Proveedor>();
            limpiarCampos();
        }

        #endregion

        #region eventos

        private void buttonBuscar_Click(object sender, EventArgs e)
        {
            double saldoDesde = double.Parse(textBoxBuscarSaldoDesde.Text);
            double saldoHasta = double.Parse(textBoxBuscarSaldoHasta.Text);
            int idDesde = int.Parse(textBoxBuscarIdDesde.Text);
            int idHasta = int.Parse(textBoxBuscarIdHasta.Text);
            int idPlan = -1;
            if (comboBoxBuscarPlan.SelectedIndex != -1)
            {
                PlanDePago planDePago = (PlanDePago)comboBoxBuscarPlan.SelectedItem;
                idPlan = planDePago.OID;
            }
            lProveedores = Sistema.buscarProveedores(textBoxBuscarNombre.Text, saldoDesde, saldoHasta,
                textBoxBuscarRUT.Text, idDesde, idHasta, idPlan, textBoxBuscarDireccion.Text);
            listaProveedores.DataSource = lProveedores.ToArray();
        }

        private void BotonAceptar_Click(object sender, EventArgs e)
        {
            if (validarDatos())
            {
                int fax = int.Parse(TextoFax.Text);
                PlanDePago unPlan = (PlanDePago)comboPlan.SelectedItem;
                actualProveedor.Nombre = TextoNombre.Text;
                actualProveedor.Direccion = TextoDireccion.Text;
                actualProveedor.EMail = TextoMail.Text;
                actualProveedor.Fax = int.Parse(TextoFax.Text);
                actualProveedor.PlanDePago = unPlan;
                actualProveedor.RUT = TextoRUT.Text;
                if (ingreso)
                {
                    ultimoIdProveedor += 1;
                    actualProveedor.OID = ultimoIdProveedor;
                    Sistema.agregarProveedor(TextoDireccion.Text, TextoMail.Text, fax,
                        TextoNombre.Text, unPlan, TextoRUT.Text);
                    lProveedores.Add(actualProveedor);
                    limpiarCampos();
                }
                else
                {
                    Sistema.modificarProveedor(TextoDireccion.Text, TextoMail.Text, fax,
                        TextoNombre.Text, unPlan, TextoRUT.Text, true, actualProveedor);
                    limpiarCampos();
                }
            }
        }

        private void BotonCancelar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }
        
        private void buttonNuevo_Click(object sender, EventArgs e)
        {
            limpiarCampos();
        }

        private void buttonEliminar_Click(object sender, EventArgs e)
        {
            if (listaProveedores.SelectedIndex != -1)
            {
                Sistema.eliminarProveedor(actualProveedor);
                lProveedores.Remove(actualProveedor);
                limpiarCampos();
            }
        }

        private void listaProveedores_MouseClick(object sender, MouseEventArgs e)
        {
            if (listaProveedores.SelectedIndex != -1)
            {
                ingreso = false;
                actualProveedor = (Proveedor)listaProveedores.SelectedItem;
                LabelID.Text = actualProveedor.OID.ToString();
                TextoNombre.Text = actualProveedor.Nombre;
                TextoDireccion.Text = actualProveedor.Direccion;
                TextoRUT.Text = actualProveedor.RUT;
                TextoFax.Text = actualProveedor.Fax.ToString();
                TextoMail.Text = actualProveedor.EMail;
                buscarPosicionDePlan();
            }
        }

        private void textBoxBuscarIdDesde_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int nro = int.Parse(textBoxBuscarIdDesde.Text);
            }
            catch
            {
                textBoxBuscarIdDesde.Text = "0";
            }
        }

        private void textBoxBuscarIdHasta_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int nro = int.Parse(textBoxBuscarIdHasta.Text);
            }
            catch
            {
                textBoxBuscarIdHasta.Text = "1000000";
            }
        }

        private void textBoxBuscarSaldoDesde_TextChanged(object sender, EventArgs e)
        {
            try
            {
                double nro = double.Parse(textBoxBuscarSaldoDesde.Text);
            }
            catch
            {
                textBoxBuscarSaldoDesde.Text = "0";
            }
        }

        private void textBoxBuscarSaldoHasta_TextChanged(object sender, EventArgs e)
        {
            try
            {
                double nro = double.Parse(textBoxBuscarSaldoHasta.Text);
            }
            catch
            {
                textBoxBuscarSaldoHasta.Text = "2000000";
            }
        }

        #endregion

        #region metodos

        private bool validarDatos()
        {
            bool ok = true;
            if (TextoNombre.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. Nombre vacío");
                ok = false;
            }
            if (TextoDireccion.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. Dirección vacía");
                ok = false;
            }
            if (TextoRUT.Text.Equals("") && ok)
            {
                MessageBox.Show("Error. RUT vacío");
                ok = false;
            }
            if (comboPlan.SelectedIndex == -1 && ok)
            {
                MessageBox.Show("Error. Debe seleccionar un plan de pago para el cliente");
                ok = false;
            }
            return ok;
        }

        private void limpiarCampos()
        {
            ingreso = true;
            TextoNombre.Text = "";
            TextoDireccion.Text = "";
            TextoTelefono.Text = "";
            ListaTelefonos.DataSource = new List<string>().ToArray();
            TextoRUT.Text = "";
            comboPlan.SelectedIndex = -1;
            TextoFax.Text = "0";
            TextoMail.Text = "";
            LabelID.Text = "";
            listaProveedores.DataSource = lProveedores.ToArray();
            actualProveedor = new Proveedor();
        }

        private void buscarPosicionDePlan()
        {
            for (int i = 0; i < comboPlan.Items.Count; i++)
            {
                PlanDePago planAux = (PlanDePago)comboPlan.Items[i];
                if (actualProveedor.PlanDePago.OID == planAux.OID)
                {
                    comboPlan.SelectedIndex = i;
                }
            }
        }

        #endregion        
        
    }
}
